package com.iot08.common.entity.admin;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * @author cwj
 * @description
 * @date 2025/2/5 16:05
 **/
@Data
@Document("refund_apply_order")
public class RefundApply implements Serializable {

    //商户退款单号
    @Id
    private String id;

    //微信/支付保/ApplePay退款单号
    private String refundNo;

    //退款方式（wechat：微信，alipay：支付宝，Apple）
    private String refundMethod;

    //支付订单号
    private String transactionId;

    //商户下单时订单号
    private String outTradeNo;

    //支付订单类型（0：会员产品订单，1：金币产品订单）
    private Integer orderType;

    //支付订单的产品类型（1：包月会员，2：包年会员，3：永久会员，4：半年会员）或（1：白金套餐，2：黄金套餐，3：红金套餐，4：紫金套餐，5：黑金套餐）
    private Integer productType;

    //退款原因
    private String refundReason;

    //订单退款渠道
    private String channel;

    //退款入账账户
    private String userReceivedAccount;

    //支付宝用户登录id
    private String buyerLogonId;

    //买家在支付宝的用户id
    private String buyerUserId;

    //买家支付宝用户唯一标识
    private String buyerOpenId;

    //退款成功时间
    private String successTime;

    //退款创建时间
    private String refundCreateTime;

    //退款状态（微信（SUCCESS：退款成功，CLOSED:退款失败，PROCESSING：退款处理中，ABNORMAL：退款异常），支付宝（SUCCESS：退款成功，CLOSED:退款失败，PROCESSING：退款处理中，ABNORMAL：退款异常））
    private String status;

    //资金账户（退款所使用资金对应的资金账户类型）或交易在支付时的门店信息
    private String fundsAccount;

    //本次退款是否发生了资金变化
    private String fundChange;

    //订单总金额
    private BigDecimal total;

    //微信指退款金额，支付宝指交易累计退款成功的金额
    private BigDecimal refund;

    //用户实际支付金额
    private BigDecimal payerTotal;

    //用户实际收到的退款金额
    private BigDecimal payerRefund;

    //商户实际退款金额
    private BigDecimal sellerRealRefund;

    //应结退款金额
    private BigDecimal settlementRefund;

    //应结订单金额
    private BigDecimal settlementTotal;

    //优惠退款金额
    private BigDecimal discountRefund;

    //币种
    private String currency;

    //手续费退款金额
    private BigDecimal refundFee;

    //记录创建时间
    private Date createTime;

    //记录更新时间
    private Date updateTime;

    //创建时间的时间戳
    private Long createTimestamp;

}
